package persistence.dao;

import java.sql.ResultSet;
import java.sql.SQLException;

import persistence.db.DataSet;
import persistence.db.DatabaseConnector;
import persistence.model.AbstractModel;
import persistence.model.Groupe;
import persistence.model.UE;
import persistence.model.Semestre;


public class GroupeDAO extends AbstractDAO{
	
	private Groupe groupe;

	/**
	 * Constructeur d'un groupe
	 */
	public GroupeDAO() {
		setTableName("GROUPE");
	}

	/**
	 * Constructeur d'un groupe DAO
	 * @param gr groupe correspondant
	 */
	public GroupeDAO(Groupe gr){
		this();
		groupe = gr;
	}
	
	public Groupe getGroupe() {
		return groupe;
	}

	public void setGroupe(Groupe groupe) {
		this.groupe = groupe;
	}

	public DataSet all() {
		return new DataSet(this);
	}

	public AbstractModel makeModel(ResultSet rset) {
		try {
			setId(rset.getInt("id_groupe"));			
			DataSet groupeIncompSet = null; //TODO gerer groupe incompatible
		
			//TODO : requete non faite non pas dans la table groupe, mais dans la table incompatible
			DataSet groupesSet = Groupe.all().filter("fk_incompatibite1 = " + getId());
			
			return new Groupe(this.getId(),
					rset.getString("nomGroupe"),
					rset.getInt("nbEtudiants"),
					rset.getInt("FK_GROUPE_SEMESTRE"),
					groupesSet);
		} catch (SQLException e) {
			System.out.println("makeModel error");
			e.printStackTrace();
		}
		return null;
	}

	public void save() {
		String query;
		ResultSet result;
		query = "INSERT INTO " + getTableName() + " VALUES ( S_PK_" + getTableName() + ".nextval, '" +
		groupe.getNomGroupe() + "', " +
		groupe.getNombreEtudiant() + ", " +
		groupe.getIdSemestre() + ")";
		/* Execute la requete */
		result = DatabaseConnector.getInstance().execute(query);
		setId(this.getId()); /* Mise a jour de l'identifiant */
	}
	
	public void save(int id) {
		String query;
		ResultSet result;
		query = "UPDATE " + getTableName() +
			" SET nomGroupe = '" + groupe.getNomGroupe() +
			"', nbEtudiants = " + groupe.getNombreEtudiant() +
			", fk_groupe_semestre = '"+ groupe.getIdSemestre() +
			" WHERE ID_"+ getTableName() + " = "+ id;
		/* Execute la requete */
		result = DatabaseConnector.getInstance().execute(query);
	}
}
